import apiClient from '../lib/interceptor';
// 路径为:@/lib/attendance

// 考勤定位请求
export const postAttendance = (attendanceData: any) => {
  return apiClient.post('/attendance/location', attendanceData);
};

interface SingleEmployeeAttendanceResponse {
  code: number;
  msg: string;
  data: AttendanceRecord[];
}

// 获取单个员工考勤记录(每一天)
export const getAttendanceRecords = (employeeId: string) => {
  return apiClient.get<SingleEmployeeAttendanceResponse>(`/attendance/getRecords/${employeeId}`);
};

interface AttendanceQueryParams {
  /** 当前页 */
  page?: number;
  /** 页面大小 */
  pageSize?: number;
  /** 打卡日期，格式：YYYY-MM-DD */
  checkInDate?: string;
  /** 是否签到：1签到，0未签到（缺勤） */
  isCheckIn?: number;
  /** 打卡状态：1上班中，2已下班，3未打卡，4迟到，5早退，6迟到加早退 */
  checkInStatus?: number;
  /** 特殊情况：1正常，2请假，3出差，4培训 */
  circumstance?: number;
}

interface AttendanceRecord {
  employeeId: string;
  checkInDate: string;
  isCheckIn: number;
  onWorkTime: string;
  offDutyTime: string;
  workingTime: string;
  overTime: string;
  checkInStatus: number;
  circumstance: number;
}

interface AttendanceResponse {
  code: number;
  msg: string;
  data: {
    row: AttendanceRecord[];
    total: number;
  };
}

// 获取所有员工考勤记录
export const getAllAttendanceRecords = (params?: AttendanceQueryParams) => {
  return apiClient.get<AttendanceResponse>('/attendance/getRecords', { params });
};

interface CheckInTimeSettings {
  /** 设置打卡的部门id */
  setDeptId: number;
  /** 设置打卡的部门类型: 1职能部门 2二级学院 3其他部门（教辅单位） */
  setDeptType: number;
  /** 设置打卡开始日期(年月日) */
  setStartDate: string;
  /** 设置打卡结束日期(年月日) */
  setEndDate: string;
  /** 设置打卡开始时间(时分秒) */
  setStartTime: string;
  /** 设置打卡结束时间(时分秒) */
  setEndTime: string;
}

interface CheckInTimeResponse {
  code: number;
  msg: string;
  data: null;
}

// 设置考勤打卡时间
export const setCheckInTime = (settings: CheckInTimeSettings) => {
  return apiClient.post<CheckInTimeResponse>('/attendance/setCheckInTime', settings);
};

export interface CheckInTimeData {
  id: number;
  setDeptId: number;
  setDeptType: number;
  setStartDate: string;
  setEndDate: string;
  setStartTime: string;
  setEndTime: string;
}

interface CheckInTimeQueryResponse {
  code: number;
  msg: string;
  data: CheckInTimeData;
}

// 判断当天是否为打卡日
export const getCheckInTime = (params: { deptId: number; deptType: number }) => {
  return apiClient.get<CheckInTimeQueryResponse>('/attendance/getCheckInTime', { params });
};

// 获取个人当天考勤信息
export const getPersonalAttendance = () => {
  return apiClient.get<{
    code: number;
    msg: string;
    data: PersonalAttendanceRecord | null;
  }>('/attendance/getRecords/personal');
};


// 获取请假记录
export const getLeaveRecords = (params: any) => {
  return apiClient.get('/attendance/leaveRecord', { params });
};

// 提交请假请求
export const postLeaveRequest = (leaveData: any) => {
  return apiClient.post('/attendance/leave', leaveData);
};

//修改请假原因
export const updateLeaveReason = (id: string, reason: string) => {
  return apiClient.patch('/attendance/updateLeaveRecord', { id, reason });
};

// 更新请假记录
export const updateLeaveRequest = (id: string, leaveData: any) => {
  return apiClient.patch(`/attendance/leaveRecord/${id}`, leaveData);
};

// 撤销请假记录
export const deleteLeaveRecords = (ids: string[]) => {
  return apiClient.delete(`/attendance/deleteLeaveRecord/${ids.join(',')}`);
};

// 提交销假请求
export const postRevokeRequest = (id: string) => {
  return apiClient.patch(`/attendance/cancelLeaveRecord/${id}`);
};

// 提交延假请求
export const postExtensionRequest = (formattedExtendForm: any) => {
  return apiClient.patch(`/attendance/leaveRecord/${formattedExtendForm.id}`, formattedExtendForm);
};

// 获取所有部门打卡设置的查询参数接口
interface AllCheckInTimeQueryParams {
  /** 当前页 */
  page?: number;
  /** 页面大小 */
  pageSize?: number;
  /** 部门类型: 1职能部门 2二级学院 3其他部门 */
  deptType?: number;
  /** 部门id */
  deptId?: number;
}

// 获取所有部门打卡设置的响应数据接口
interface AllCheckInTimeResponse {
  code: number;
  msg: string;
  data: {
    total: number;
    row: CheckInTimeData[];
  };
}

/**
 * 获取所有部门的打卡设置信息
 * @param params 查询参数
 * @returns Promise<AllCheckInTimeResponse>
 */
export const getAllCheckInTime = (params?: AllCheckInTimeQueryParams) => {
  console.log('【获取所有部门打卡设置】请求参数:', params);
  return apiClient.get<AllCheckInTimeResponse>('/attendance/getAllCheckInTime', { params });
};

// 导出完整的 PersonalAttendanceRecord 接口
export interface PersonalAttendanceRecord {
  /** 打卡日期 */
  checkInDate: string;
  /** 是否签到：1打卡，0未打卡（缺勤） */
  isCheckIn: number;
  /** 上班打卡时间 */
  onWorkTime: string;
  /** 下班打卡时间 */
  offDutyTime: string;
  /** 上班工作时间 */
  workingTime: string;
  /** 加班时长 */
  overTime: string;
  /** 打卡状态：1上班中 2已下班 3未打卡 4迟到 5早退 6迟到加早退 */
  checkInStatus: number;
  /** 特殊情况：1没有，2请假，3出差，4培训 */
  circumstance: number;
}

interface PersonalAttendanceResponse {
  code: number;
  msg: string;
  data: PersonalAttendanceRecord[] | null;
}

/**
 * 获取个人所有考勤记录
 * @returns Promise<PersonalAttendanceResponse>
 */
export const getPersonalAllAttendance = () => {
  return apiClient.get<PersonalAttendanceResponse>('/attendance/getRecords/personal/all');
};


